# 2025.04.12力扣网刷题
# 找出数组中的幸运数——数组、哈希表、计数——简单
# 在整数数组中，如果一个整数的出现频次和它的数值大小相等，我们就称这个整数为「幸运数」。
# 给你一个整数数组 arr，请你从中找出并返回一个幸运数。
# 如果数组中存在多个幸运数，只需返回 最大 的那个。
# 如果数组中不含幸运数，则返回 - 1 。
# 示例 1：
# 输入：arr = [2, 2, 3, 4]
# 输出：2
# 解释：数组中唯一的幸运数是 2 ，因为数值 2 的出现频次也是 2 。
# 示例 2：
# 输入：arr = [1, 2, 2, 3, 3, 3]
# 输出：3
# 解释：1、2 以及 3 都是幸运数，只需要返回其中最大的 3 。
# 示例 3：
# 输入：arr = [2, 2, 2, 3, 3]
# 输出： - 1
# 解释：数组中不存在幸运数。
# 示例 4：
# 输入：arr = [5]
# 输出： - 1
# 示例 5：
# 输入：arr = [7, 7, 7, 7, 7, 7, 7]
# 输出：7
# 提示：
# 1 <= arr.length <= 500
# 1 <= arr[i] <= 500

class Solution(object):
    def findLucky(self, arr):
        """
        :type arr: List[int]
        :rtype: int
        """
        max_num = max(arr)
        hash = [0] * (max_num + 1)
        for num in arr:
            hash[num] += 1
        for i in range(max_num, 0, -1):
            if hash[i] == i:
                return i
        return -1

if __name__ == '__main__':
    s = Solution()
    arr = [2, 2, 3, 4]
    print(s.findLucky(arr))